package com.wn.main.aop

import com.blankj.utilcode.util.LogUtils
import org.aspectj.lang.JoinPoint
import org.aspectj.lang.ProceedingJoinPoint
import org.aspectj.lang.annotation.Around
import org.aspectj.lang.annotation.Aspect
import org.aspectj.lang.annotation.Before

/**
 * @Author: wn
 * @Date: 2025/1/15 16:54
 * @Description: AOP切面编程
 */
// 注解产生关联 -- 定义切面
@Aspect
class AspectUtil {

  /**
   * @Around 每个函数前后都插入代码
   * 具体类 加 **+(..)表示什么参数都可以 -- MyApplication 中 所有方法
   */
  @Around("call(* com.wn.wanflow.MyApplication**(..))")
  fun getApplicationTime(joinPoint: ProceedingJoinPoint) {
    // 在函数内要加入的代码
    // 获取函数名称
    val signature = joinPoint.signature
    val curTime = System.currentTimeMillis()
    try {
      // 前后执行一次
      joinPoint.proceed()
    } catch (e: Exception) {
      e.printStackTrace()
    }
    LogUtils.eTag(
      "AspectUtilLog",
      "${signature.name} | time：${System.currentTimeMillis() - curTime}"
    )
  }

  /**
   * @Before 每个函数前都插入代码
   * 所有Activity 的 on** 方法
   * "execution(* android.app.Activity+.onCreate(..))" -- 所有 Activity 的 onCreate 方法
   */
  @Before("execution(* android.app.Activity.on**(..))")
  fun onActivityCalled(joinPoint: JoinPoint) {
    // 这里可以插入任意代码段
    LogUtils.eTag("onActivityCalled", "所有:${joinPoint.signature.name}")
  }

// @Before("execution(* set*(..))")
// @After("execution(public * *(..))")
// @Around("execution(android.app.Activity. *(..))")

  /**
   * 点击事件
   */
// @Around("execution(* android.view.View.OnClickListener.onClick(..))")
}